const { toString } = Object.prototype;
const inBrowser = typeof window !== 'undefined';

const userAgent = inBrowser && navigator.userAgent;

/**
 * @desc 验证值为非 undefined 和 null
 * @param {*} value
 */
export function isDef(value) {
  return value !== undefined && value !== null;
}
/**
 * @desc 是否为 Android
 */
export function isAndroid() {
  return inBrowser ? /android/.test(userAgent.toLowerCase()) : false;
}
/**
 * @desc 是否为 IOS
 */
export function isIOS() {
  return inBrowser ? /ios|iphone|ipad|ipod/.test(userAgent.toLowerCase()) : false;
}

/**
 * @desc 验证 6 为纯数字验证码
 * @param {*} value
 */
export function isVcode(value) {
  const reg = /^\d{6}$/;
  return reg.test(value);
}

/**
 * @desc: 验证身份证
 * @param {*} value
 */
export function isIdNo(value) {
  const reg = /(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/;
  return reg.test(value);
}
/**
 * @desc: 验证手机号
 * @param {*} value
 */
export function isPhone(value) {
  const reg = /^1(3|4|5|6|7|8|9)\d{9}$/;
  return reg.test(value);
}

/**
 * @param {String} token
 */
export function isToken(token) {
  const token2Ary = String(token).split('-');
  // 有效的 token 长度会大于 2
  return token2Ary.length > 2;
}

/**
 * @desc 是否一个纯对象
 * @param {*} any
 */
export function isPlainObj(value) {
  return toString.call(value) === '[object Object]';
}

/**
 * @desc 校验一个字符串是否是一个 url、邮箱、手机号
 * @param {string} path
 * @returns {Boolean}
 */
export function isExternal(path) {
  return /^(https?:|mailto:|tel:)/.test(path);
}
